package packAlarma;

import org.junit.Test;

import junit.framework.TestCase;

public class AlarmaTest extends TestCase {

	// objeto bajo prueba
	private Alarma alarma;

	protected void setUp() throws Exception {
		super.setUp();
		alarma = new Alarma();
	}

	/**
	 * Metodo que comprueba que el estado del atributo alarma es el indicado por
	 * los parámetros
	 * 
	 * @param humo
	 *            estado esperado del "humo detectado" de la alarma
	 * @param presencia
	 *            estado esperado de la "presencia detectada" de la alarma
	 * @return true si el estado de la alarma es el indicado por los parámetros
	 *         y false en caso contrario
	 */
	public boolean compruebaEstado(boolean humo, boolean presencia) {
		Alarma.EstadoAlarmas estado = alarma.notifica();
		return (humo == estado.humoDetectado)
				&& (presencia == estado.presenciaDetectada);
	}

	/***
	 * Realiza la prueba de estados de la clase Alarma. Ir modificando las
	 * variables en el orden del diagrama y asegurar que compruebaEstado
	 * devuelve lo que tiene que devolver en cada uno de los posibles estados.
	 */
	@Test
	public void testEstadosAlarma() {
		// Caso de prueba 1: notifica : esperado 'Desactivada'
		assertTrue(compruebaEstado(false, false));
		System.out.println("assertTrue(compruebaEstado(false, false))");
		alarma.notifica().imprimir();
		// Caso de prueba 2: humoDetectado , notifica : esperado 'Fuego'
		alarma.humoDetectado();
		assertTrue(compruebaEstado(true, false));
		System.out.println("assertTrue(compruebaEstado(true, false))");
		alarma.notifica().imprimir();
		// Caso de prueba 3: desactiva , notifica : esperado 'Desactivada'
		alarma.desactiva();
		assertTrue(compruebaEstado(false, false));
		System.out.println("assertTrue(compruebaEstado(false, false))");
		alarma.notifica().imprimir();
		// Caso de prueba 4: humoDetectado , presenciaDetectada, notifica :
		// esperado 'Fuego&Presencia'
		alarma.humoDetectado();
		alarma.presenciaDetectada();
		assertTrue(compruebaEstado(true, true));
		System.out.println("assertTrue(compruebaEstado(true, true))");
		alarma.notifica().imprimir();
		// Caso de prueba 5: desactiva, notifica: esperado 'Desactivada'
		alarma.desactiva();
		assertTrue(compruebaEstado(false, false));
		System.out.println("assertTrue(compruebaEstado(false, false))");
		alarma.notifica().imprimir();
		// Caso de prueba 6: presenciaDetectada, notifica: esperada 'Presencia'
		alarma.presenciaDetectada();
		assertTrue(compruebaEstado(false, true));
		System.out.println("assertTrue(compruebaEstado(false, true))");
		alarma.notifica().imprimir();
		// Caso de prueba 7: desactiva, notifica: esperada 'Desactiva'
		alarma.desactiva();
		assertTrue(compruebaEstado(false, false));
		System.out.println("assertTrue(compruebaEstado(false, false))");
		alarma.notifica().imprimir();
		// Caso de prueba 8: presenciaDetectada, humoDetectado, notifica:
		// esperado 'Fuego&Presencia'
		alarma.presenciaDetectada();
		alarma.humoDetectado();
		assertTrue(compruebaEstado(true, true));
		System.out.println("assertTrue(compruebaEstado(true, true))");
		alarma.notifica().imprimir();

	}

}
